package com.sodimac.v2s.commands
{
	import com.adobe.cairngorm.commands.ICommand;
	import com.adobe.cairngorm.control.CairngormEvent;
	import com.sodimac.util.alerts.alert;
	import com.sodimac.util.commons.EstadosBPM;
	import com.sodimac.util.commons.Session;
	import com.sodimac.util.commons.UtilString;
	import com.sodimac.util.commons.UtilXml;
	import com.sodimac.v2s.business.UploadDelegate;
	import com.sodimac.v2s.events.grabarProformaInvoicePorPaisEvent;
	import com.sodimac.v2s.model.ComprasModelLocator;
	
	import mx.events.CloseEvent;
	import mx.rpc.IResponder;

	public class grabarProformaInvoicePorPaisCommand implements ICommand, IResponder
	{
		private var modelo:ComprasModelLocator = ComprasModelLocator.getInstance();
		private var sesion:Session = new Session();	
		private var accion:String;
		private var arrConfirmados:Array;
		private var confirmaTodos:Boolean = true;
		
				
		public function execute(event:CairngormEvent):void
		{
			var delegate:UploadDelegate = new UploadDelegate(this);
			var encEvt:grabarProformaInvoicePorPaisEvent= grabarProformaInvoicePorPaisEvent(event);
			
			accion = encEvt.estado;
			arrConfirmados = encEvt.confirmacionArr;
			
			//check confirm all countries
			if (arrConfirmados)
			{
				for (var i:int=0; i<arrConfirmados.length; i++)
				{
					if ( Number(arrConfirmados[i]["confirmado"]) < 1 ) 
					{
						confirmaTodos = false;	
					}
					
				}
			}

						
			
			delegate.GrabarProductosPiPorPais(modelo.cabecera, encEvt.idPedidoCorp,
									encEvt.idEmpresa, encEvt.idProveedorCorp, encEvt.estado, 
									encEvt.version, encEvt.productosCorpArr, encEvt.productosNacArr,
									encEvt.confirmacionArr);

		}
		
        public function result(obj: Object): void
        {            
			var xmlList:XMLList;
			var xml:XML = new XML(obj.result);
			xml = UtilXml.removeNamespacesFromXML(xml);
			xmlList = xml.children();
			
			var result:Number = Number(xmlList.cabecera.@id);
			var glosa:String =  xmlList.cabecera.@glosa;
			trace("WS GrabarProformaInvoicePorPais response id=" + result);

	  	      switch (result){
	  	      case 0:   //Ok
	  	      			
	  	      			//Enviar estado a BPM
	  	      			alert.success("PIC por PAIS ha sido "+ UtilString.toLowerCase(accion) + " exitosamente.",
	  	      			alertListener);
	  	      			break;
	  	      			
	  	      case 1:   //Error
	  	      			alert.error("Ha ocurrido un error:\n\n"+  glosa);
	  	      			break;
	  	      			
	  	      default:  //reintentar
	  	      	  	     alert.info("Problemas con respuesta del servicio, " + 
									"favor reintente mas tarde.\n\n"+ glosa);
	  	      			break;                  	      						
	  	      }


        }
                
        public function fault(obj: Object): void
        {
        	alert.error("Ha ocurrido un error al grabar Productos.");
        	sesion.endSession();
        }	
	
		private function alertListener(eventObj:CloseEvent):void 
		{
			
			if  (accion == EstadosBPM.ENVIO) 
			{
		      	//se envia estado a BPM
				var resp:Object = new Object();
				resp.estado = accion;
				if (arrConfirmados)
				{
					resp.listadoPaises = (confirmaTodos)? "CONFIRMADO":"RECHAZADO";
				}
				sesion.callbackBPM(resp);
			}
			sesion.endSession();
		}
			
	
		
	}
}